package com.micro.school.order.service;

import com.micro.school.common.core.web.domain.AjaxResult;
import com.micro.school.order.bo.GenerateBillBo;
import com.micro.school.order.bo.PayStudentFeeBo;
import com.micro.school.order.entity.GenerateBillEntity;
import com.micro.school.order.entity.PayStudentFee;
import com.micro.school.order.entity.PayStudentFeeItem;
import com.micro.school.order.vo.PayStudentFeeItemVo;
import com.micro.school.order.vo.PayStudentFeeVo;
import com.micro.school.system.api.domain.vo.PayStudentFeeItemVos;
import com.micro.school.system.api.domain.vo.PayStudentFeePaymentDetailVos;
import com.micro.school.system.api.domain.vo.PayStudentFeeVos;
import com.micro.school.system.api.domain.vo.StudentPayVos;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 学生收费管理Service接口
 * 
 * @author lyb
 * @date 2025-08-16
 */
public interface IPayStudentFeeService 
{
    /**
     * 查询学生收费管理
     * 
     * @param id 学生收费管理主键
     * @return 学生收费管理
     */
    public PayStudentFeeVo selectPayStudentFeeById(Long id);

    /**
     * 根据主表（学生收费）主键查询
     */
    List<PayStudentFeeItemVo> queryDetailsByStudentFeeId(Long studentFeeId);

    /**
     * 查询学生收费管理列表
     * 
     * @param payStudentFee 学生收费管理
     * @return 学生收费管理集合
     */
    public List<PayStudentFeeVo> selectPayStudentFeeList(PayStudentFeeBo payStudentFee);

    /**
     * 新增学生收费管理
     * 
     * @param payStudentFee 学生收费管理
     * @return 结果
     */
    public int insertPayStudentFee(PayStudentFee payStudentFee);

    /**
     * 新增学生收费管理
     *
     * @param payStudentFeeBo 学生收费管理
     * @return 结果
     */
    public AjaxResult insertPayStudentFee(PayStudentFeeBo payStudentFeeBo);

    /**
     * 修改学生收费管理
     * 
     * @param payStudentFee 学生收费管理
     * @return 结果
     */
    public int updatePayStudentFee(PayStudentFee payStudentFee);

    /**
     * 批量删除学生收费管理
     * 
     * @param ids 需要删除的学生收费管理主键集合
     * @return 结果
     */
    public int deletePayStudentFeeByIds(Long[] ids);

    /**
     * 删除学生收费管理信息
     * 
     * @param id 学生收费管理主键
     * @return 结果
     */
    public int deletePayStudentFeeById(Long id);

    /**
     * 生成账单
     */
    public void generateBill(GenerateBillBo billBo);


    /**
     * 根据学生ID查询
     */
    List<PayStudentFeeVo> listByStudentIds(List<Long> studentId);

    public AjaxResult saveStudentFee(List<GenerateBillEntity> entities, Map<Integer,List<PayStudentFeeVo>> feeMap);

    public int deletePayStudentFeeById(PayStudentFee studentFee);

    PayStudentFeeVos getFeignOne(PayStudentFeeVos payStudentFeeVos);

    Map<String, Map<String, Object>> getFeignFeeItemVo(PayStudentFeeVos payStudentFeeVos);

    List<PayStudentFeeItemVos> queryStudentFeeItemDetails(PayStudentFeeVos payStudentFeeVos);

    List<PayStudentFeeVo> selectPayStudent(PayStudentFee payStudentFee);

    int updateStudentFee(List<PayStudentFeePaymentDetailVos> payStudentFeePaymentVosDetails);

    PayStudentFeeVos queryStudentFeeByDetail(Long studentFeeId);

    BigDecimal sumStudentFee(Long studentFeeId);

    void updateStudentFeeTotalMoney(PayStudentFeeVos payStudentFeeVos);

    void updateAllOrderCollegeName(String collegeName, Long collegeId);

    void updateAllCollegeMajor(String majorName, Long id);

    void updateAllCollegeModel(String modelName, Long id);

    void updateAllCampusName(String campusName, Long id);

    void updateAllFeeYear(String feeYear, Long id);
}
